{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d885824b",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from scipy import stats\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "plt.style.use('fivethirtyeight')\n",
    "\n",
    "import graphviz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "7a2494ed",
   "metadata": {},
   "outputs": [],
   "source": [
    "COLORS = [\n",
    "    '#00B0F0',\n",
    "    '#FF0000'\n",
    "]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a0fd06fd",
   "metadata": {},
   "source": [
    "# Chapter 04\n",
    "\n",
    "In this chapter we focus on graphical models for causal inference. We start with a refresher on graphs. Next, we introduce a concept of graphical models and directed  acyclic graphs. Finally, we discuss the limitations of DAGs and show a couple of different approaches to model cyclic relationships. This and next chapter are critical to understand the very essence of causal inference as understood in this book."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "663cd1b3",
   "metadata": {},
   "source": [
    "## Visualizations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "15ce38f8",
   "metadata": {},
   "outputs": [],
   "source": [
    "nodes = ['A', 'B', 'C', 'D']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "8464768d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define graphs\n",
    "graphs = {\n",
    "    \n",
    "    'DAG': {\n",
    "        'graph': graphviz.Digraph(format='png'),\n",
    "        'edges': ['AB', 'BC', 'AD', 'DC']\n",
    "    },\n",
    "    \n",
    "    'DCG': {\n",
    "        'graph': graphviz.Digraph(format='png'),\n",
    "        'edges': ['AB', 'AD', 'BB', 'BC', 'DC', 'CA']\n",
    "    },\n",
    "    \n",
    "    'Undirected': {\n",
    "        'graph': graphviz.Graph(format='png'),\n",
    "        'edges': ['AB', 'BC', 'AD', 'DC']\n",
    "    }, \n",
    "    \n",
    "    'Fully connected': {\n",
    "        'graph': graphviz.Graph(format='png'),\n",
    "        'edges': ['AB', 'AC', 'AD', 'BC', 'BD', 'CD']\n",
    "    },\n",
    "    \n",
    "    'Partially connected': {\n",
    "        'graph': graphviz.Graph(format='png'),\n",
    "        'edges': ['AB', 'AC', 'BC']\n",
    "    }\n",
    "}\n",
    "\n",
    "\n",
    "# Iterate over graphs and render\n",
    "for name, graph in graphs.items():\n",
    "    \n",
    "    [graph['graph'].node(n) for n in nodes]\n",
    "    graph['graph'].edges(graph['edges'])\n",
    "    \n",
    "    graph['graph'].render(f'img/ch_04_graph_{name}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf7a9b51",
   "metadata": {},
   "source": [
    "### Adjacency matrices"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a71199eb",
   "metadata": {},
   "source": [
    "$$\\Large \\begin{bmatrix} 0 & 1 \\\\ 0 & 0 \\end{bmatrix}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "321fb278",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.46.0 (20210118.1747)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"62pt\" height=\"116pt\"\n",
       " viewBox=\"0.00 0.00 62.00 116.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 112)\">\n",
       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-112 58,-112 58,4 -4,4\"/>\n",
       "<!-- 0 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>0</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"27\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"27\" y=\"-86.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">0</text>\n",
       "</g>\n",
       "<!-- 1 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>1</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"27\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"27\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">1</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;1 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>0&#45;&gt;1</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M27,-71.7C27,-63.98 27,-54.71 27,-46.11\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"30.5,-46.1 27,-36.1 23.5,-46.1 30.5,-46.1\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x214efc52880>"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "graph = graphviz.Digraph(format='png')\n",
    "\n",
    "nodes = ['0', '1']\n",
    "\n",
    "edges = ['01']\n",
    "\n",
    "[graph.node(n) for n in nodes]\n",
    "graph.edges(edges)\n",
    "\n",
    "graph.render(f'img/ch_04_graph_adj_00')\n",
    "\n",
    "graph"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f1ed97e7",
   "metadata": {},
   "source": [
    "$$\\Large \\begin{bmatrix} 0 & 1 & 0 \\\\ 0 & 0 & 0 \\\\ 1 & 1 & 0 \\end{bmatrix}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "a560bf46",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.46.0 (20210118.1747)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"89pt\" height=\"188pt\"\n",
       " viewBox=\"0.00 0.00 89.00 188.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 184)\">\n",
       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-184 85,-184 85,4 -4,4\"/>\n",
       "<!-- 0 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>0</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"27\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"27\" y=\"-86.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">0</text>\n",
       "</g>\n",
       "<!-- 1 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>1</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"54\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"54\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">1</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;1 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>0&#45;&gt;1</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M33.4,-72.41C36.51,-64.34 40.33,-54.43 43.83,-45.35\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"47.13,-46.55 47.46,-35.96 40.6,-44.03 47.13,-46.55\"/>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>2</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"54\" cy=\"-162\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"54\" y=\"-158.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">2</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;0 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>2&#45;&gt;0</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M47.6,-144.41C44.49,-136.34 40.67,-126.43 37.17,-117.35\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"40.4,-116.03 33.54,-107.96 33.87,-118.55 40.4,-116.03\"/>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;1 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;1</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M57.65,-143.91C59.68,-133.57 61.98,-120.09 63,-108 64.34,-92.06 64.34,-87.94 63,-72 62.28,-63.5 60.93,-54.31 59.49,-46.01\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"62.91,-45.29 57.65,-36.09 56.03,-46.56 62.91,-45.29\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x214efc521f0>"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "graph = graphviz.Digraph(format='png')\n",
    "\n",
    "nodes = ['0', '1', '2']\n",
    "\n",
    "edges = ['01', '21', '20']\n",
    "\n",
    "[graph.node(n) for n in nodes]\n",
    "graph.edges(edges)\n",
    "\n",
    "graph.render(f'img/ch_04_graph_adj_01')\n",
    "\n",
    "graph"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ceb195a",
   "metadata": {},
   "source": [
    "$$\\Large \\begin{bmatrix} 0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \\\\ 1 & 0 & 1 & 0 \\end{bmatrix}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "1670337b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.46.0 (20210118.1747)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"89pt\" height=\"260pt\"\n",
       " viewBox=\"0.00 0.00 89.00 260.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 256)\">\n",
       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-256 85,-256 85,4 -4,4\"/>\n",
       "<!-- 0 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>0</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"27\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"27\" y=\"-86.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">0</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>2</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"54\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"54\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">2</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>0&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M33.4,-72.41C36.51,-64.34 40.33,-54.43 43.83,-45.35\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"47.13,-46.55 47.46,-35.96 40.6,-44.03 47.13,-46.55\"/>\n",
       "</g>\n",
       "<!-- 1 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>1</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"54\" cy=\"-234\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"54\" y=\"-230.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">1</text>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>3</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"54\" cy=\"-162\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"54\" y=\"-158.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">3</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>1&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M54,-215.7C54,-207.98 54,-198.71 54,-190.11\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"57.5,-190.1 54,-180.1 50.5,-190.1 57.5,-190.1\"/>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;0 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>3&#45;&gt;0</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M47.6,-144.41C44.49,-136.34 40.67,-126.43 37.17,-117.35\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"40.4,-116.03 33.54,-107.96 33.87,-118.55 40.4,-116.03\"/>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;2 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M57.65,-143.91C59.68,-133.57 61.98,-120.09 63,-108 64.34,-92.06 64.34,-87.94 63,-72 62.28,-63.5 60.93,-54.31 59.49,-46.01\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"62.91,-45.29 57.65,-36.09 56.03,-46.56 62.91,-45.29\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x214efc526d0>"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "graph = graphviz.Digraph(format='png')\n",
    "\n",
    "nodes = ['0', '1', '2', '3']\n",
    "\n",
    "edges = ['02', '13', '32', '30']\n",
    "\n",
    "[graph.node(n) for n in nodes]\n",
    "graph.edges(edges)\n",
    "\n",
    "graph.render(f'img/ch_04_graph_adj_02')\n",
    "\n",
    "graph"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6f6e3dc0",
   "metadata": {},
   "source": [
    "## Graphs in Python "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "31bd9f08",
   "metadata": {},
   "outputs": [],
   "source": [
    "import networkx as nx"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "015289ac",
   "metadata": {},
   "source": [
    "### Edge list"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fe0b4f0c",
   "metadata": {},
   "source": [
    "### GML \n",
    "\n",
    "**GML** stands for graph modeling language. \n",
    "\n",
    "More on **GML** synatx here: https://github.com/GunterMueller/UNI_PASSAU_FMI_Graph_Drawing/blob/master/GML/gml-technical-report.pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "id": "d6c36c7f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define the graph\n",
    "sample_gml = \"\"\"graph [\n",
    "directed 1\n",
    "\n",
    "node [\n",
    "    id 0\n",
    "    label \"0\"\n",
    "    ]\n",
    "\n",
    "node [\n",
    "    id 1\n",
    "    label \"1\"\n",
    "    ]\n",
    "    \n",
    "node [\n",
    "    id 2\n",
    "    label \"2\"\n",
    "    ]\n",
    "\n",
    "\n",
    "edge [\n",
    "    source 0\n",
    "    target 1\n",
    "    ]\n",
    "    \n",
    "edge [\n",
    "    source 2\n",
    "    target 1\n",
    "    ]\n",
    "]\n",
    "    \n",
    "    \"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "id": "b19833ce",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Get the graph\n",
    "graph = nx.parse_gml(sample_gml)\n",
    "\n",
    "# Plot\n",
    "nx.draw(\n",
    "    G=graph, \n",
    "    with_labels=True,\n",
    "    node_size=2500,\n",
    "    node_color=COLORS[0],\n",
    "    font_color='white'\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07c497d3",
   "metadata": {},
   "source": [
    "### Adjacency matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "id": "ed2b1dbc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define the matrix\n",
    "adj_matrix = np.array([\n",
    "    [0, 1, 0],\n",
    "    [0, 0, 0],\n",
    "    [0, 1, 0]\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "id": "bb1d9b04",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb4AAAEuCAYAAADx63eqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8/fFQqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAr9klEQVR4nO3daVRUZ7ov8H8NUFQxi4qJhgTFKW0QlBiNIg4RJ5RNEjvGGN217LXuvX3Pt9O91umsnLNOn/S56bW6v911+6zVq9O1UeMQk1CgKIIDOCDigFMMKsaBaAiNzENB1a59P5jsk8FE1Nq1a1f9f58SlV3P5gN/3mc/735NiqIoICIiihBmvQsgIiIKJgYfERFFFAYfERFFFAYfERFFFAYfERFFFAYfERFFFKveBfwcn19BY68fla0+1HX40O1V4FMAWQEsJsBqAhKiTJidbEX+aCumxJlhNZv0LpuIiEKYKdT28XV6Ffzpmgc192S0ePxoHVTQIz/86+ItwGibCWNizMhLseC3E2OQFMUQJCKi7wuZ4DvV4cP7VwfR0CXj5sCTl/Scw4TsBAvemWRDTnJIL2yJiCiIdA++pl4Zm84N4EKXjE5f4K+fFAVkJljwQZYdGXGWwH8AEREZim7B51cUvHdlEH+/PYTbAVjhPUya3YRNadF4d7INZhNboEREkUqX4GvqleFsGEB9h4yhIH66zQzkJFkgZXP1R0QUqYIefEfafBAb+nGjX78O63iHCVK2A7kj+eyPiCjSBHUfX3mLF2+f1Tf0AOCLfgXrz/ajvMWrax1ERBR8QVvxHWnzYf3ZfjQH4XnecKXZTdgyw4H5XPkREUWMoARfU6+M/BN9uq/0HiTdYULVnFhM4DM/IqKIoHmr068oEBsGQjL0AOBG//36/KGxnZGIiDSmefC9d2UQpzqG8eoVHZ3qlPGHK4N6l0FEREGgafA19cr4++2hoG5ZeByDfuCD20No6g3tgCYioienafBtOjcQlM3pgXB7QMGvzg3oXQYREWlMs+Crb/fhQpexVlDnu2Wc6tDgvWlERBQyNAu+P14b1OTdm1rq9ALvX+OzPiKicKZJ8HV6FTR0G2u1961zXTI6vcZozxIR0aPTJPj+dM2DmyG6feFhbvQr+HOTR+8yiIhII5oEX809Y672vlXdZuz6iYjopwU8+Hx+BS0ef6AvG1Rfe/yQuaGdiCgsBTz4Gnv9aB0MfGhEm4G/Zdlxc0k8ulcm4GxeHJaN1uYdm61DChp7jB3eRET0YAEPvspWH3o06BRaTUDzgB95x3qRWN6Nf2304KMXHXjWHvhDZbt99++DiIjCT8CDr06jfXD9MvD7K4O4NaBAAVD+tQ83+vyYmaTNy6W1ug8iItJXwIOvO0hbAUbbTJgUZ8ZnGrUku7ilgYgoLAV+uCUIeWE1AR/OdKC4eQhXerUJvmDcBxERBV/Ag0/WODBMALbMsGPIr+CfLmi3307r+yAiIn0EfCzSEvhZk+/5INuOVJsZK+r6NF2VaX0fRESkj4AHn1XDwPivzBhMjTPjldo+aL1VUMv7ICIi/QQ8+BKitEmMNLsJ/zPdBo+soGVZgvrn/+P8ALZ96Q3452l1H0REpK+AB9/sZCt23Q38VoDbAwpMpV0Bv+5PmZOszeZ4IiLSV8CHW/JHWxGvzda6oEmw3r8PIiIKPwEPvilxZoy2GbtNOCoamBKv6eH0RESkk4D/dLeaTRgTY+zQuHmuHuvXrcPOnTvR3d2tdzlERBRAmiRUXoqxe53/tCAbixYtwubNmzFu3DisWLECf/3rX9HS0qJ3aURE9IRMihL483c6vQqyq3sMeRhtusOEswvikfTNVGd3dzcqKirgdruxb98+TJ06FYIgQBAETJo0SedqiYjoUWkSfADw6sk+lLQY70XPRU9Z8ems2Af+3dDQEKqrq+F2u+F2u5GUlISioiIIgoCZM2fCbDZ2i5eIKBJoFnz17T4sPdGHTgNlX1IUUDUnFjnD2Mrg9/tx+vRpuN1ulJSUoKenB4WFhRAEAXl5eYiOjg5CxURE9Kg0Cz4AyDvWiyP3NDicTyPzUyyomRf3WF/b2NiI0tJSuN1uXLlyBcuXL0dRURGWLl2K+Pj4AFdKRESPS9Pga+qVsbi2D7cHQv9ZX5rdhEMvx2JC3JMP5ty9exe7d+9GSUkJamtrMX/+fAiCgFWrViE1NTUA1RIR0ePSNPgA4D8aPfjPq4MYCuHss5mBdyba8G9TYgJ+7a6uLuzbtw9utxsVFRWYNm2aOhyTkZER8M8jIqKfp3nw+RUF84/14Xh76LY8542woGZeLMwmbTfeDw4O4vDhw3C73SgtLcXIkSPVEJwxYwZMGn8+EREFIfiA+y3P/BN9uBGC2xvSHSZUzQlMi/NR+P1+nDx5Uh2O8Xg86nDM/PnzERUVFdR6iIgiRVCCDwCOtPnw9tn+kHrel2Y3YesMB3JH6vteTkVR0NjYqG6TaGpqwsqVKyEIApYuXYrY2AdvryAiokcXtOADgPIWL359YSAkwi/NbsJfMu1YOSb0VlZffvklysrK4Ha7UVdXhwULFqjDMaNGjdK7PCIiQwtq8AH3V37Ohn58oWPbc7zDBClb/5XecHR2dmLv3r1wu92orKxEZmam+lxw/PjxepdHRGQ4QQ8+ALjeK0NsGMCpThmDGp+k/l02M/BikgVStj3oz/QCwePx4NChQ+pwzJgxY9QQzMrK4nAMEdEw6BJ8wP1pzz9cGcQHt4eC0vpMs5uwKS0a7062aT69GQyyLKOurk4djvF6vRAEAUVFRZg3bx6s1tBfzRIR6UG34PtWU6+MX50bwPluGZ3ewF8/KQqYnmDB37LsyDDgKm84FEXB5cuX1RC8efMmCgoKIAgC8vPz4XA49C6RiChk6B583zrV4cP71wbR0CUH5FSHdIcJ2YkW/G6ibVjv3gwnzc3N6uvT6uvrsWjRIgiCgIKCAowcOVLv8oiIdBUywfetTq+CPzd5UN0m42uPH61DCrqH8aLrBCswOtqE1BgzFo604DcZMUiMMn5L80m1t7erwzFVVVWYMWMGBEFAYWEhnnvuOb3LIyIKupALvu+SFQWNPX5UtvpQ1+FDl1eBTwFkBbCYAKsJSIwyYXayFfmjrZgSb4YlDJ7faWVgYAAHDhyA2+3G7t27MXbsWHU4JjMzk8MxRBQRQjr4SDuyLKO2tlZ9LqgoijocM3fuXFgs4fk8lIiIwUdQFAUXL15U3xzT3NyMVatWQRAELFmyBHa7Xe8SiYgChsFHP3Lr1i11OObMmTNYvHixOhwzYsQIvcsjInoiDD76Wffu3UN5eTlKSkpw6NAh5OTkqMMxaWlpepdHRPTIGHw0bP39/aiqqlKHY5599ll1OGbatGkcjiEiQ2Dw0WPx+Xw4fvy4OhxjtVrVEJwzZw6HY4goZDH46IkpioLz58+rwzFfffWVOhzzyiuvICYm8CfbExE9LgYfBdyNGzfU4Zhz585hyZIlEAQBK1asQHJyst7lEVGEY/CRptra2rB792643W4cPnwYL730kjocM27cOL3LI6IIxOCjoOnr60NlZSXcbjf27NmD8ePHq5vmp06dyuEYIgoKBh/pwuv14tixYygpKYHb7UZMTIw6HDN79myYzWa9SySiMMXgI90pioKGhgZ1OKa1tRWrV69GUVERFi1aBJvNpneJRBRGGHwUcq5fv47S0lKUlJTg4sWLWLp0qTock5iYqHd5RGRwDD4Kaa2trepwTE1NDebMmQNBELB69WqMHTtW7/KIyIAYfGQYvb292L9/P9xuN8rLyzFx4kQUFRVBEARMmTJF7/KIyCAYfGRIXq8XNTU16nPBuLg4dThm1qxZHI4hop/E4CPDUxQFZ86cUUOwvb0dhYWFEAQBCxcuRHR0tN4lElEIYfBR2Ll27ZoagpcvX8ayZcsgCAKWL1+OhIQEvcsjIp0x+CistbS0qMMxR48exdy5c9U3x4wZM0bv8ohIBww+ihg9PT2oqKhASUkJ9u3bh6lTp6rPBSdNmqR3eUQUJAw+ikhDQ0Oorq5WW6JJSUlqCObk5HA4hiiMMfgo4vn9fpw+fVo9W7Cnp0cdjsnLy+NwDFGYYfAR/UBjY6N6rNKVK1ewfPlyCIKAZcuWIT4+Xu/yiOgJMfiIfsZXX32FsrIylJSUoLa2Frm5uSgqKsKqVauQmpqqd3lE9BgYfETD1NXVhX379sHtdqOiogLTpk1TnwtmZGToXR4RDRODj+gxDA4O4vDhw3C73SgtLUVKSop6tuCMGTN4tiBRCGPwET0hv9+PkydPqsMxAwMD6kpw/vz5iIqK0rtEIvoOBh9RACmKgsbGRnWbRFNTE1asWKEOx8TGxupdIlHEY/ARaejOnTvqhGhdXR0WLFgAQRCwatUqjBo1Su/yiCISg48oSDo7O7F371643W5UVlYiMzNTbYmOHz9e7/KIIgaDj0gHHo8Hhw4dUodjUlNT1bMFs7KyOBxDpCEGH5HOZFlGXV2dOhzj9XrVlWBubi6sVqveJRKFFQYfUQhRFAWXL19WQ/DmzZsoKCiAIAjIz8+Hw+HQu0Qiw2PwEYWw5uZmdTimvr4eixYtgiAIKCgowMiRI/Uuj8iQGHxEBtHe3q4Ox1RVVSE7O1ttiT733HN6l0dkGAw+IgMaGBjAgQMH4Ha7sXv3bowdO1YNwczMTA7HEP0MBh+RwcmyjNraWvW5oKIoagjOnTuXwzFEP8DgIwojiqLg0qVLKCkpgdvtRnNzM1atWgVBELBkyRLY7Xa9SyTSHYOPKIzdunVLHY45c+YMFi9erA7HjBgxQu/yiHTB4COKEPfu3UN5eTlKSkpw8OBB5OTkoKioCIWFhUhLS9O7PKKgYfARRaD+/n5UVVWpwzHPPvus+lxw2rRpHI6hsMbgI4pwPp8Px48fV4djLBaLerbgnDlzYLFY9C6RKKAYfESkUhQF58+fV49Vunv3LlavXg1BEPDKK68gJiZG7xKJnhiDj4h+0o0bN9ThmIaGBixZsgSCIGDlypVITk7Wuzyix8LgI6JhaWtrw+7du+F2u3H48GG89NJLEAQBhYWFGDdunN7lEQ0bg4+IHllfXx8qKyvhdruxZ88ejB8/Xh2Oef755zkcQyGNwUdET8Tr9eLo0aPqc0GbzaaeLTh79myYzWa9SyT6HgYfEQWMoihoaGhQQ7C1tVUdjlm0aBGHYygkMPiISDPXr19HaWkpSkpKcPHiReTn56OoqAgrVqxAYmKi3uVRhGLwEVFQtLa2qsMxNTU1mDNnDgRBwOrVqzF27Fi9y6MIwuAjoqDr7e3F/v374Xa7UV5ejokTJ6rDMVOnTtW7PApzDD4i0pXX60VNTY36XDAuLk4NwVmzZnE4hgKOwUdEIUNRFJw5c0YNwXv37qGwsBCCIGDhwoWw2Wx6l0hhgMFHRCHr2rVraghevnwZy5YtgyAIWL58ORISEvQujwyKwUdEhtDS0qIOxxw9ehRz585Vh2OeeuopvcsjA2HwEZHhdHd3o6KiAm63G/v27cOUKVPUEyUmTZqkd3kU4hh8RGRoQ0NDqK6uVluiSUlJ6nBMTk4Oh2PoRxh8RBQ2/H4/Tp8+rZ4t2N3drQ7HLFiwANHR0XqXSCGAwUdEYauxsVE9VunKlStYvnw5BEHAsmXLEB8fr3d5pBMGHxFFhLt372L37t0oKSlBbW0tcnNz1eGY1NRUvcujIGLwEVHE6erqwr59++B2u1FRUYFp06apzwUzMjL0Lo80xuAjoog2ODiIw4cPw+12o7S0FCkpKWoIzpw5k2cLfofPr6Cx14/KVh/qOnzo9irwKYCsABYTYDUBCVEmzE62In+0FVPizLCaQ+/7x+AjIvqG3+/HyZMn1eGYgYEBFBYWoqioCPPnz0dUVJTeJQZdp1fBn655UHNPRovHj9ZBBT3yw78u3gKMtpkwJsaMvBQLfjsxBklRoRGCDD4iogdQFAWNjY3qNommpiasWLECgiBg6dKliIuL07tETZ3q8OH9q4No6JJxc+DJY+I5hwnZCRa8M8mGnGRrACp8fAw+IqJh+PLLL1FWVga32426ujrk5eWpwzGjRo3Su7yAaeqVsencAC50yej0Bf76SVFAZoIFH2TZkRFnCfwHDAODj4joEXV2dmLv3r1wu92orKxEZmam+lxw/Pjxepf3WPyKgveuDOLvt4dwOwArvIdJs5uwKS0a7062wRzk56gMPiKiJ+DxeHDo0CF1OCY1NVUNwezsbEMMxzT1ynA2DKC+Q8ZQEBPBZgZykiyQsoO7+mPwEREFiCzLqKurU4djvF6vGoK5ubmwWvV9tvUgR9p8EBv6caNfvygY7zBBynYgd2Rwvj8MPiIiDSiKgsuXL6sheOPGDRQUFEAQBOTn5yM2NlbvElHe4sWvLwwEpbX5MGl2E/6SacfKMdpPzjL4iIiCoLm5WX19Wn19PRYtWgRBEFBQUICRI0cGvZ4jbT6sP9uP5hAIvW+l2U3YMsOB+Rqv/Bh8RERB1t7erg7HVFVVITs7G4IgoLCwEOnp6Zp/flOvjPwTfbq2N39KusOEqjmxmKDhMz8GHxGRjgYGBnDgwAG43W6UlZVh7Nix6nPB6dOnB3w4xq8omH+sD8fbh7ELXSfzRlhQMy9Ws2lPBh8RUYiQZRm1tbXqc0FFUdQQnDt3bkCGY37f6MH/uToY1OnNR2UzA+9MtOHfpsRocn0GHxFRCFIUBRcvXlTfHNPc3Py94Ri73f7I12zqlbG4ti8khlkeJs1uwsGXYzXZ5sDgIyIygFu3bqnDMWfOnMHixYshCAJWrlyJlJQUAPdXjCtXrsR7772HF1988UfXyDvWiyP3QrfF+UN5KRZUzwv8q+EYfEREBnPv3j3s2bMHbrcbBw8eRE5ODgRBwLhx47Bu3TpYrVbs378fc+fOVb+mvt2HpSf6NHkNmVaSooDKObF4McDv9mTwEREZWH9/P6qqquB2u7Fjxw54PB4AQExMDPbs2YPFixcDAF492YeSFgOl3jeKnrLi01mB3fPI4CMiCgOKouDpp59GS0vL9/78yJEjeGH2PGRX9+BmCG5feJh0hwlnF8QH9Eij0Ht/DhERPbK+vj54vV5MmjQJ06ZNQ05ODpKTk/Hiiy/ivWseQ4YeANzoV/DnJg/+MPXRh3l+CoOPiCgMxMXFoa2t7YF/V3OvN8jVBFZ1W2AHcswBvRoREYUUn19Bi8cf8Ov+7/RonMqLhacgAa7swK3GHuRrjx9yAJ/KMfiIiMJYY68frYOBb3Pe9fjxh2/O79Na65CCxp7AhTeDj4gojFW2+tCjwda9kq98KG3x4V4QXgHT7bt/H4HC4CMiCmN1HcbbwvAggbwPBh8RURjr9hpzmvOHugJ4Hww+IqIw5guP3AvofTD4iIjCmBwmwRfI+2DwERGFMYs2R9rBYrp/fJDF9P3/1kogr80N7EREYcyqURi9O8mGf//OeXlvPxONf2/04PdXBjX5vEDeB4OPiCiMJQTwHZff9fsrg5qF3IME8j7Y6iQiCmOzA3ykj17mBPA+GHxERGEsf7QV8YE/xDyoEqz37yNQGHxERGFsSpwZo20aTp0EwehoE6bEBy6uGHxERGGivb0dX3zxhXoYLQBYzSaMiTH2j/rUGDMsJj7jIyKiH/jd736HSZMmIS4uDg6HA0lJSVi2bBnyUozd61wwMrD1M/iIiMLE6tWrERUVBVmWMTAwgJ6eHgiCgN9OjMFzDmO2O9MdJvwmI+bh//ARhMe4DxFRhFIUBXV1dZAkCR999BFk+f5RDHa7HX/961+xfv16AEB2ggU3+433wuqsRAuSArwlgys+IiIDunPnDv74xz9i6tSpEEUR6enpuHTpEv75n/8ZAPD++++roQcA/zLRhiSDLXWSooB3JtoCfl2TogTwWFsiItKMx+NBaWkpJEnCyZMnsWbNGoiiiNmzZ8P0zfBHa2srDhw4gHXr1v3o6/OO9eLIPQ0O59PI/BQLaubFBfy6DD4iohCmKApOnz4Nl8uFjz76CDNmzIAoihAEAQ6H45Gu1dQrY3FtH24PhP6P/TS7CYdejsWEuMAP5hhs4UtEFBlaWlqwZcsWSJKEoaEhiKKIs2fPIi0t7bGvmRFnwaa0aPzn1UEE4eD0x2YzA5vSojUJPYArPiKikDE4OIg9e/bA5XLh+PHjePXVV+F0OjF37ly1lfmk/IqC+cf6cLw9dFue80ZYUDMvFuYA7t37LgYfEZGOFEVBQ0MDJEnC9u3b8cILL0AURbz22muIjY3V5DObemXkn+jDjf7Q+/Gf7jChao42Lc5vsdVJRKSD1tZWfPjhh3C5XOjp6YEoiqivr0d6errmn50RZ4GU7cDbZ/tD6nlfmt2E4myHpqEHcMVHRBQ0Xq8X5eXlkCQJNTU1KCwshCiKmD9/Pszm4O8uK2/x4tcXBkIi/NLsJvwl046VY6I0/ywGHxGRxi5cuACXy4Vt27Zh8uTJcDqdeP311xEfH693aTjS5oOzoR9f6Nj2HO8wQcp2IHdkcJqQDD4iIg20tbVh+/btcLlcaGtrw8aNG7Fx40ZkZGToXdqPXO+VITYM4FSnjEF/8D7XZgZeTLJAyrZr3t78LgYfEVGA+Hw+VFRUwOVy4eDBgygoKIDT6cTChQt1aWU+Cr+i4A9XBvHB7aGgtD7T7CZsSovGu5Ntmk1v/hQGHxHRE/rss88gSRK2bt2K8ePHQxRF/PKXv0RiYqLepT2ypl4Zvzo3gPPdMjq9gb9+UhQwPcGCv2XZkRHEVd53MfiIiB5DR0cHtm/fDkmScPfuXWzYsAEbN27E5MmT9S4tIE51+PD+tUE0dMm4GYDnf+kOE7ITLfjdRBtykvXdUMDgIyIaJlmWUVlZCUmSsH//fixbtgxOpxOvvPIKLBZjn3n3Uzq9Cv7c5EF1m4yvPX60DinoHsYhDwnW+yenp8aYsXCkBb/JiEFigE9ZeFwMPiKih2hsbIQkSdiyZQvGjRsHp9OJN954A8nJyXqXFlSyoqCxx4/KVh/qOnzo8irwKYCsABYTYDUBiVEmzE62In+0FVPiA3tyeqAw+IiIHqCrqws7duyAJEm4efMm3n77bYiiiOeff17v0ugJMfiIiL4hyzIOHToEl8uFvXv3YsmSJRBFEUuXLoXVyhddhQsGHxFFvGvXrqG4uBibN2/G6NGjIYoi3nzzTaSkpOhdGmmAv8IQUUTq7u7Grl27IEkSrl69ivXr12PPnj3IzMzUuzTSGFd8RBQx/H4/qqurIUkSysrKsHDhQjidTixfvhxRUdq/I5JCA4OPiMLeF198geLiYhQXFyMxMRFOpxNvvfUWRo0apXdppAO2OokoLPX29uKTTz6By+XCZ599hnXr1sHtdiMrK0vv0khnXPERUdhQFAVHjx6FJEkoKSlBbm4uRFFEQUEBoqOj9S6PQgSDj4gM79atW9i8eTMkSYLdbldbmWPGjNG7NApBbHUSkSH19/fj008/hSRJOHfuHNauXYudO3di5syZMIXg20IodHDFR0SGoSgKamtrIUkSPvnkE8yePRtOpxOrVq1CTEyM3uWRQXDFR0Qh78svv1RbmRaLBaIo4tKlS3j66af1Lo0MiMFHRCFpYGAApaWlcLlcOH36NNasWYMtW7Zg1qxZbGXSE2HwEVHIUBQF9fX1cLlc2LVrF3JyciCKItxuN+x2u97lUZhg8BGR7u7evYutW7dCkiT4fD6Ioohz587hmWee0bs0CkMcbiEiXQwODqKsrAySJOHEiRN47bXXIIoiXn75ZbYySVMMPiIKGkVRcObMGUiShB07dmD69OlwOp0oKipCbGys3uVRhGCrk4g09/XXX6utzL6+PoiiiDNnzuDZZ5/VuzSKQFzxEZEmhoaGUF5eDpfLhaNHj0IQBIiiiNzcXJjNZr3LowjG4COigDp37hwkScK2bdvw/PPPQxRFvP7664iLi9O7NCIAbHUSUQD84x//wLZt2yBJEjo6OrBx40acOHECEyZM0Ls0oh/hio+IHovX68W+ffsgSRIOHTqEVatWwel0YsGCBWxlUkhj8BHRI7l06RJcLhc+/PBDZGRkwOl0Ys2aNUhISNC7NKJhYauTiB6qvb1dbWV+/fXX2LBhA44ePYqJEyfqXRrRI+OKj4geyOfzobKyEi6XC1VVVVixYgVEUcTixYthsVj0Lo/osTH4iOh7Pv/8c0iShC1btiAtLQ1OpxNvvPEGkpKS9C6NKCDY6iQidHZ2YseOHXC5XGhubsaGDRtw8OBBTJ06Ve/SiAKOKz6iCCXLMg4cOABJkrBv3z4sXboUoihiyZIlsFr5OzGFLwYfUYS5evUqJEnC5s2b8dRTT8HpdGLt2rUYMWKE3qURBQV/rSOKAN3d3fjoo4/gcrlw/fp1rF+/HhUVFZg2bZrepREFHVd8RGHK7/fj8OHDcLlc2LNnDxYvXgxRFLFs2TJERUXpXR6Rbhh8RGHm+vXrKC4uRnFxMVJSUiCKItatW4eRI0fqXRpRSGCrkygM9PT04OOPP4YkSfj888/x1ltvoaysDNOnT9e7NKKQwxUfkUH5/X4cOXIEkiTB7XYjLy8PTqcTK1asQHR0tN7lEYUsBh+Rwdy8eVNtZcbGxsLpdOKtt95Camqq3qURGQJbnUQG0NfXh08++QSSJOHChQt48803sWvXLsyYMQMmk0nv8ogMhSs+ohClKAqOHz8OSZLwySefYO7cuRBFEatWrYLNZtO7PCLD4oqPKMQ0Nzdj8+bNkCQJUVFRcDqduHz5Mp566im9SyMKCww+ohAwMDCAkpISSJKEM2fO4Je//CU+/PBDvPjii2xlEgUYg49IJ4qioK6uDpIkYdeuXZg1axY2bdqEsrIyxMTE6F0eUdhi8BEF2Z07d7BlyxZIkgRFUSCKIi5cuIBx48bpXRpRROBwC1EQeDwelJWVweVy4eTJk3j99dchiiLmzJnDViZRkDH4iDSiKApOnz4NSZKwc+dOZGVlwel0oqioCA6HQ+/yiCIWW51EAdbS0oKtW7dCkiR4PB6IoogzZ87g2Wef1bs0IgJXfEQBMTQ0hN27d0OSJBw7dgxFRUVwOp2YN28eW5lEIYbBR/SYFEXBuXPn4HK5sH37dkybNg2iKOK1115DXFyc3uUR0U9gq5PoEbW2tmLbtm1wuVzo6uqCKIqor69Henq63qUR0TBwxUc0DF6vF3v37oXL5UJ1dTUKCwshiiLy8vJgNpv1Lo+IHgGDj+hnXLhwAZIk4cMPP8SkSZPgdDqxZs0axMfH610aET0mtjqJfuDevXvYtm0bJEnCP/7xD2zcuBHHjx9HRkaG3qURUQBwxUcEwOfzoaKiApIk4cCBA1i5ciWcTicWLlwIi8Wid3lEFEAMPopoly9fhsvlwtatW5Geng5RFPHGG28gMTFR79KISCNsdVLE6ejowI4dO+ByuXDnzh1s2LAB1dXVmDx5st6lEVEQcMVHEUGWZVRVVcHlcmH//v1YtmwZRFHEkiVL2MokijAMPgprV65cgSRJ2LJlC8aOHQtRFLF27VokJyfrXRoR6YStTgo7XV1d2LlzJyRJwo0bN7B+/Xrs378fv/jFL/QujYhCAFd8FBZkWcbhw4fhcrlQXl6OV155BU6nE0uXLoXVyt/viOi/MfjI0JqamiBJEjZv3oxRo0ZBFEWsW7cOKSkpepdGRCGKvwqT4fT09GDXrl1wuVy4evUq3nrrLezZsweZmZl6l0ZEBsAVHxmC3+9HTU0NJElCaWkpFi5cCFEUsWLFCkRFReldHhEZCIOPQtqNGzdQXFyM4uJiJCQkwOl0Yt26dRg9erTepRGRQbHVSSGnr68PH3/8MSRJwqVLl/Dmm2/i008/RVZWFg91JaInxhUfhQRFUXDs2DG4XC6UlJRg3rx5EEURBQUFsNlsepdHRGGEwUe6un37NjZv3gxJkmCz2eB0OrF+/XqMGTNG79KIKEyx1UlB19/fj5KSEkiShIaGBrzxxhvYvn07cnJy2MokIs1xxUdBoSgKTpw4AUmS8PHHH+Oll16C0+nE6tWrERMTo3d5RBRBuOIjTd25c0dtZZpMJjidTly8eBFjx47VuzQiilAMPgo4j8eD0tJSuFwu1NfXY82aNSguLsZLL73EViYR6Y7BRwGhKApOnToFl8uFjz76CDNnzoQoiigpKYHdbte7PCIiFYOPnshXX32FrVu3QpIkDA0NQRRFNDQ0IC0tTe/SiIgeiMMt9MgGBwexe/duSJKE48eP47XXXoMoipg7dy5bmUQU8hh8NCyKouDs2bOQJAk7duzACy+8AKfTiVdffRWxsbF6l0dENGxsddLPam1tVVuZvb292LhxI06dOoXnnntO79KIiB4LV3z0I0NDQ9i7dy9cLhdqamogCAKcTidyc3NhNpv1Lo+I6Ikw+Eh1/vx5SJKEbdu2YcqUKRBFEa+//jri4+P1Lo2IKGAistXp8yto7PWjstWHug4fur0KfAogK4DFBFhNQEKUCbOTrcgfbcWUODOs5vAc2mhra8O2bdvgcrnQ3t6OjRs3ora2FhMmTNC7NCIiTUTMiq/Tq+BP1zyouSejxeNH66CCHvnhXxdvAUbbTBgTY0ZeigW/nRiDpChjh6DX60VFRQUkScLBgwexatUqiKKIhQsXspVJRGEv7IPvVIcP718dREOXjJsDT36rzzlMyE6w4J1JNuQkG2vB/Nlnn8HlcmHr1q2YMGECnE4n1qxZg8TERL1LIyIKmrANvqZeGZvODeBCl4xOX+CvnxQFZCZY8EGWHRlxlsB/QIC0t7djx44dcLlc+Oqrr7BhwwaIoohJkybpXRoRkS7CLvj8ioL3rgzi77eHcDsAK7yHSbObsCktGu9OtsEcIpu3fT4fqqqq4HK5UFlZieXLl8PpdGLx4sWwWEI3pImIgiGsgq+pV4azYQD1HTKGgnhXNjOQk2SBlK3v6q+xsRGSJGHLli145plnIIoi1q5di6SkJN1qIiIKNWETfEfafBAb+nGjX7/bGe8wQcp2IHdk8J79dXZ2YufOnZAkCbdu3cLbb7+NjRs34vnnnw9aDURERhIWwVfe4sWvLwwEpbX5MGl2E/6SacfKMVGafYYsyzh48CAkScLevXuxZMkSOJ1O5Ofnw2o11sANEVGwGT74jrT5sP5sP5pDIPS+lWY3YcsMB+YHeOV37do1SJKEzZs3IzU1FU6nE2vXrkVKSkpAP4eIKJwZOviaemXkn+jTtb35U9IdJlTNicWEJ3zm193djV27dsHlcuHatWtYv349RFHECy+8EKBKiYgii2GDz68omH+sD8fbh7ELXSfzRlhQMy/2kac9/X4/qqur4XK5sHv3bixatAiiKGL58uWIitKuhUpEFAkMG3y/b/Tg/1wdDOr05qOymYF3Jtrwb1NihvXvv/jiCxQXF6O4uBhJSUlwOp1Yt24dRo0apXGlRESRw5DB19QrY3FtX0gMszxMmt2Egy/H/uQ2h97eXnz88ceQJAmXL1/GunXrIIoisrKyglsoEVGEMGTw5R3rxZF7odvi/KG8FAuq58Wp/68oCo4ePQqXywW3243c3Fw4nU6sXLkS0dHROlZKRBT+DDf7Xt/uw4Uu44QeAJzvlnGqw4fR3XfUVqbdbofT6cQf//hHpKam6l0iEVHEMNyK79WTfShp0eDlmxob1XQC/vfXY+3atXA6nZgxYwZMIfKKMyKiSGKoFV+nV0FDt7FWe98yjZ+Oz25+idS44Q26EBGRNgx1+NqfrnlwMwT37A1Hq9mB/9tszNqJiMKJoYKvxkADLQ9S3Wbs+omIwoFhgs/nV9Di8etdxhP52uOHbKxHqkREYccwwdfY60froDahkRxlwqezHOhdmYCbS+Lx5lht3o7SOqSgscfY4U1EZHSGCb7KVh96NOoU/r/MGAz5FaRWdOOtM/34r+l2PB8f+G9Nt+/+fRARkX4ME3x1HdoEhsMCvPZ0FP7180H0ycDxdhllLV68/Yw2qz6t7oOIiIbHMMHX7dWmzTkpzgxZAa71/XcL8nyXjF/Ea3OSepdG90FERMNjmODzaZQXcRbTj8Koy6cg3qrN5nKt7oOIiIbHMMEnaxQYvbKChB+EXILVhB6NEkqr+yAiouExTPBZNHq719VeP6xmICP2v78V0xMt+EyjSRqt7oOIiIbHMMGnUecR/TLw6V0v/mOKDQ4L8PIICwrHRGFLs1eTz9PqPoiIaHgME3wJUdolxq8veGC3mNC6LAHbZzrwv84P4LJG++20vA8iIno4w7ykenayFbvuarMVoMOroKi+X5Nr/9CcZMN8y4mIwpJhVnz5o63QaIdB0CRY798HERHpxzDBNyXOjNE2Y7cJR0ebMEWDN8IQEdHwGeansNVswpgYw5T7QKkxZlh4+CwRka4MlSR5KcbudS4Yaez6iYjCgUlRjHNOTqdXQXZ1jyEPo013mHB2QTySONVJRKQrQ634kqJMyE4w5qopK9HC0CMiCgGGCj4A+JeJNiQZbDAyKQp4Z6JN7zKIiAgGDL5ZI6zITDTWqi8zwYIc7t8jIgoJhgs+APggy440uzHahml2E/6eZde7DCIi+oYhgy8jzoJNadGIDvHss5mBTWnRmBBnrBUqEVE4M9RU53f5FQXzj/XheLs2pygEwrwRFtTMi4WZe/eIiEKGIVd8AGA2mSBl25HuCM1QSXfcr4+hR0QUWgwbfMD9lqeU7Qi5531pdhOKsx1scRIRhSBDBx8AzB9pxV8yQ2fYJc1uwl8y7cgdySlOIqJQZNhnfD90pM0HZ0M/vtDxrS7jHSZI2Q6GHhFRCAub4AOA670yxIYBnOqUMajNObIPZDMDLyZZIGXb2d4kIgpxYRV8wP1pzz9cGcQHt4dwe0D7W0uzm7ApLRrvTrZxkIWIyADCLvi+1dQr41fnBnC+W0anN/DXT4oCpidY8LcsOzK4yiMiMoywDb5vnerw4f1rg2jokgNyqkO6w4TsRAt+N9HG15ARERlQ2Afftzq9Cv7c5EF1m4yvPX60Dino9j386xKs909OT40xY+FIC36TEYNEnrJARGRYERN83yUrChp7/Khs9aGuw4curwKfAsgKYDEBVhOQGGXC7GQr8kdbMSWeJ6cTEYWLiAw+IiKKXIbfwE5ERPQoGHxERBRRGHxERBRRGHxERBRRGHxERBRR/j/LuiWURlK2UwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Get the graph\n",
    "graph = nx.from_numpy_matrix(adj_matrix, create_using=nx.DiGraph)\n",
    "\n",
    "# Plot\n",
    "nx.draw(\n",
    "    G=graph, \n",
    "    with_labels=True,\n",
    "    node_size=2500,\n",
    "    node_color=COLORS[0],\n",
    "    font_color='white'\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "id": "1faf022e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Define the matrix\n",
    "adj_matrix = np.array([\n",
    "    [0, 1, 0, 1, 0, 1],\n",
    "    [0, 0, 0, 0, 0, 0],\n",
    "    [0, 0, 0, 0, 1, 0],\n",
    "    [0, 0, 1, 0, 0, 0],\n",
    "    [0, 0, 0, 0, 0, 1],\n",
    "    [0, 0, 0, 0, 0, 0],\n",
    "])\n",
    "\n",
    "# Get the graph\n",
    "graph = nx.from_numpy_matrix(adj_matrix, create_using=nx.DiGraph)\n",
    "\n",
    "# Plot\n",
    "nx.draw(\n",
    "    G=graph, \n",
    "    with_labels=True,\n",
    "    node_size=2000,\n",
    "    node_color=COLORS[0],\n",
    "    font_color='white',\n",
    "    pos=nx.planar_layout(graph)\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "931fb8b2",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:causal_book_py38]",
   "language": "python",
   "name": "conda-env-causal_book_py38-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
